package 中等.模拟;

/**
 * 给你两个整数 numBottles 和 numExchange 。
 * numBottles 代表你最初拥有的满水瓶数量。在一次操作中，你可以执行以下操作之一：
 * 喝掉任意数量的满水瓶，使它们变成空水瓶。
 * 用 numExchange 个空水瓶交换一个满水瓶。然后，将 numExchange 的值增加 1 。
 * 注意，你不能使用相同的 numExchange 值交换多批空水瓶。例如，如果 numBottles == 3 并且 numExchange == 1 ，则不能用 3 个空水瓶交换成 3 个满水瓶。
 * <p>
 * 返回你 最多 可以喝到多少瓶水。
 *
 * @ https://leetcode.cn/problems/water-bottles-ii/description/
 * @date 2024/03/31
 */
public class 换水问题II {

    public static void main(String[] args) {


        System.out.println(maxBottlesDrunk(10, 3));

    }

    /**
     * 模拟+贪心
     * 如果空瓶子可以换1个满瓶子，那么优先换
     */
    public static int maxBottlesDrunk(int numBottles, int numExchange) {
        int drink = 0, emptyBottles = 0, fullBottles = numBottles;
        while (true) {
            if (emptyBottles - numExchange >= 0) {
                emptyBottles -= numExchange;
                fullBottles++;
                numExchange++;
                continue;
            }
            if (fullBottles == 0) {
                break;
            }

            drink += fullBottles;
            emptyBottles += fullBottles;
            fullBottles = 0;
        }

        return drink;
    }

}
